package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 会员API密钥实体类，用于存储会员的API密钥信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "member_api_key")
public class MemberApiKey {

    /**
     * API密钥ID，主键，自动生成的唯一标识。
     */
    @ApiModelProperty(value = "API密钥ID", required = true, example = "1")
    private Long id;

    /**
     * 会员ID，密钥所属的会员标识。
     */
    @ApiModelProperty(value = "会员ID", required = true, example = "1")
    private Long memberId;

    /**
     * API Key，用于身份验证的公开部分。
     */
    @ApiModelProperty(value = "API Key", required = true, example = "AK123456789")
    private String apiKey;

    /**
     * Secret Key，用于身份验证的私有部分。
     */
    @ApiModelProperty(value = "Secret Key", required = true, example = "SK123456789")
    private String secretKey;

    /**
     * 绑定IP，多个IP以逗号分隔，限制API密钥只能从这些IP访问。
     */
    @ApiModelProperty(value = "绑定IP", example = "192.168.1.1,192.168.1.2")
    private String bindIp;

    /**
     * API名称，用于区分不同用途的API密钥。
     */
    @ApiModelProperty(value = "API名称", required = true, example = "Trading API")
    private String apiName;

    /**
     * 备注，关于API密钥的额外说明。
     */
    @ApiModelProperty(value = "备注", example = "用于交易操作的API密钥")
    private String remark;

    /**
     * 过期时间，API密钥的有效期限。
     */
    @ApiModelProperty(value = "过期时间", example = "2023-01-01 12:00:00")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date expireTime;

    /**
     * 创建时间，记录API密钥创建的时间戳。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-01-01 12:00:00")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 验证码，用于API密钥的额外验证，非数据库字段。
     */
    @ApiModelProperty(value = "验证码", hidden = true)
    private String code;
}

